package com.iotp.service.menu;


import com.iotp.entity.menu.Menu;

import java.util.List;

/**
 * 系统菜单业务接口
 * @author Assassin
 */
public interface MenuService {

	// Methods

   /**
	* 添加系统菜单根菜单
	* @param menuType 标识信息-菜单类型
	* @param orgId 标识信息-机构Id
	* @param menuName 基本信息-菜单名称
	* @param aliasName 基本信息-菜单别名
	* @param menuIcon 基本信息-菜单图标
	* @param menuDesc 基本信息-菜单说明
	* @param menuUrl 授权信息-菜单URL
	* @param authPerms 授权信息-授权角色[ALL-全部]
	* @return Long menuId 添加后的数据库主键值
	*/
	public Long addRoot(Integer menuType, Long orgId, String menuName, String aliasName, String menuIcon,
                        String menuDesc, String menuUrl, String authPerms);
	
   /**
	* 添加系统菜单子菜单
	* @param menuPid 层级信息-父级Id[ROOT-0]
	* @param menuName 基本信息-菜单名称
	* @param aliasName 基本信息-菜单别名
	* @param menuIcon 基本信息-菜单图标
	* @param menuDesc 基本信息-菜单说明
	* @param menuUrl 授权信息-菜单URL
	* @param authPerms 授权信息-授权角色[ALL-全部]
	* @return Long menuId 添加后的数据库主键值
	*/
	public Long addSub(Long menuPid, String menuName, String aliasName, String menuIcon, String menuDesc,
                       String menuUrl, String authPerms);

   /**
	* 删除系统菜单
	* @param menuId 主键值
	*/
	public void delete(Long menuId);

   /**
	* 更新系统菜单
	* @param menuId 标识信息-菜单Id
	* @param menuStatus 状态信息-菜单数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param menuOrder 状态信息-菜单排序
	* @param menuName 基本信息-菜单名称
	* @param aliasName 基本信息-菜单别名
	* @param menuIcon 基本信息-菜单图标
	* @param menuDesc 基本信息-菜单说明
	* @param menuUrl 授权信息-菜单URL
	* @param authPerms 授权信息-授权角色[ALL-全部]
	*/
	public void edit(Long menuId, Integer menuStatus, Integer isDel, Integer menuOrder, String menuName,
                     String aliasName, String menuIcon, String menuDesc, String menuUrl, String authPerms);

   /**
	* 主键查询系统菜单
	* @param menuId 主键值
	* @return Menu 实体
	*/
	public Menu queryById(Long menuId);

   /**
	* 根据条件查询系统菜单列表
	* @param menuId 标识信息-菜单Id[主键值]
	* @param menuCode 标识信息-菜单编码
	* @param menuType 标识信息-菜单类型
	* @param orgId 标识信息-机构Id
	* @param menuStatus 状态信息-菜单数据状态
	* @param isDel 状态信息-是否删除[1-是 | 0-否]
	* @param menuOrder 状态信息-菜单排序
	* @param menuLevel 层级信息-菜单层级
	* @param isParent 层级信息-是否父级[1-是 | 0-否]
	* @param menuPid 层级信息-父级Id[ROOT-0]
	* @param menuName 基本信息-菜单名称
	* @param aliasName 基本信息-菜单别名
	* @param menuIcon 基本信息-菜单图标
	* @param menuDesc 基本信息-菜单说明
	* @param menuUrl 授权信息-菜单URL
	* @param authPerms 授权信息-授权角色[ALL-全部]
	* @param createTime 时间信息-创建时间
	* @param updateTime 时间信息-更新时间[初始化=NULL]
	* @return List<Menu> 实体List
	*/
	public List<Menu> queryList(Long menuId, String menuCode, Integer menuType, Long orgId, Integer menuStatus,
                                Integer isDel, Integer menuOrder, Integer menuLevel, Integer isParent, Long menuPid, String menuName,
                                String aliasName, String menuIcon, String menuDesc, String menuUrl, String authPerms, Long createTime,
                                Long updateTime);
	
	/**
	 * 编辑菜单状态（逻辑删除 | 恢复）
	 * @param menuId 菜单Id
	 * @param isDel 是否删除状态
	 */
	public void editIsDel(Long menuId, Integer isDel);
	
	/**
	 * 根据父Id查询子菜单信息
	 * @param menuPid 父菜单Id
	 * @return List<Menu>
	 */
	public List<Menu> querySubList(Long menuPid);
	
	/**
	 * 查询角色对应的菜单信息
	 * @param roleId 角色Id
	 * @return List<Menu>
	 */
	public List<Menu> queryMenuByRoleId(Long roleId);
	
	/**
	 * 根据属性验证菜单是否存在
	 * @param menuId 菜单Id
	 * @param menuName 菜单名称
	 * @param menuUrl 菜单URL
	 * @return List<Menu>
	 */
	public List<Menu> queryIsMenuExist(Long menuId, String menuName, String menuUrl);
	
}